package org.mappland.compltres.domain;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.time.LocalDateTime;


@Data
@TableName(value = "`user`")
public class User {

    /**
     * 用户唯一标识符。
     */
    @TableId(value = "id")
    private Integer id;

    /**
     * 用户创建时间，使用 LocalDateTime 以获得更好的日期和时间处理能力。
     * 使用 {@link DateTimeFormat} 和 {@link JsonFormat} 注解指定输入输出格式。
     */
    @TableField(value = "create_time")
    @DateTimeFormat(pattern = DATE_TIME_PATTERN)
    @JsonFormat(pattern = DATE_TIME_PATTERN, shape = JsonFormat.Shape.STRING)
    private LocalDateTime createTime = LocalDateTime.now();

    /**
     * 用户电子邮件地址。
     */
    @TableField(value = "email")
    private String email;

    /**
     * 用户名，用于显示和登录。
     */
    @TableField(value = "user_name")
    private String userName;

    /**
     * 用户密码，应加密存储，且不在日志或输出中显示。
     */
    @TableField(value = "password")
    private String password; // 使用 transient 关键字避免序列化

    /**
     * 用户性别，0 代表未知，1 代表男性，2 代表女性。
     */
    @TableField(value = "sex")
    private Integer sex;

    /**
     * 用户联系电话。
     */
    @TableField(value = "phone")
    private String phone;

    /**
     * 用户积分，默认值为 0。
     */
    @TableField(value = "points")
    private Integer points = 0;

    /**
     * 用户状态，默认值为 0，表示正常状态。
     */
    @TableField(value = "state")
    private Integer state = 0;

    /**
     * 日期时间格式模式，用于指定日期和时间的字符串表示形式。
     * 格式："yyyy-MM-dd HH:mm" 表示四位数的年份、两位数的月份、两位数的日、
     * 两位数的小时（24小时制）和两位数的分钟，各部分之间用连字符和空格分隔。
     */
    private static final String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm";

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", createTime=" + createTime +
                ", email='" + email + '\'' +
                ", userName='" + userName + '\'' +
                ", password='" + password + '\'' +
                ", sex=" + sex +
                ", phone='" + phone + '\'' +
                ", points=" + points +
                ", state=" + state +
                '}';
    }
}
